/**
 * 给定数组A，问有多少对(Ai, Aj)拼起来是36的倍数
 * N在1E5
 * 
 * 注意到36是4和9的倍数，分别考虑
 * 对每一个Ai考虑它可以作为结尾拼成多少个合法的数，分情况讨论
 * 1. Ai是奇数，没有贡献
 * 2. Ai不是个位数：
 *      2.1 Ai不是4的倍数，没有贡献
 *      2.2 Ai是4的倍数，令left是Ai对9取模, 则所有对9取模为9 - left的数均可，这个数量可以预处理出来。注意left为零的情况
 * 3. Ai是个位数，则Ai只能是2468
 *      3.1 Ai是2或者6，那些个位是1、3、5、7、9的且对9取模为 9 - 2 或者 9 - 6 的有贡献，数量可以预处理
 *      3.2 Ai是4或者8，那些个位是02468且对9取模为 9-4 或者 9-8 的有贡献，数量可以预处理出来  
 * O(10N)以内可以完成
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;

int N;
vector<llt> A;

llt proc(){
    vector<vector<int>> w(10, vector<int>(9, 0));
    for(auto i : A){
        w[i % 10][i % 9] += 1;
    }

    llt ans = 0;
    for(auto i : A){
        if(i & 1) continue;

        if(i >= 10){
            if(i % 4 == 0){
                auto left = i % 9;
                if(0 == left){
                    for(const auto & wi : w){
                        ans += wi[0];
                    }
                    ans -= 1;
                }else{
                    auto other = 9 - left;
                    for(const auto & wi : w){
                        ans += wi[other];
                    }
                }
            }else{
                ;;
            } 
        }else{
            assert(i == 2 or i == 4 or i == 6 or i == 8);
            if(i == 2 or i == 6){
                auto other = 9 - i;
                for(int j=1;j<10;j+=2){
                    ans += w[j][other];
                }                
            }else{
                auto other = 9 - i;
                for(int j=0;j<10;j+=2){
                    ans += w[j][other];
                } 
            }
        }
    }
    return ans;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--){
        cin >> N;
        A.assign(N, {});
        for(auto & i : A) cin >> i;
        cout << proc() << "\n";        
    }
    return 0;
}